package contentManage

import (
	"github.com/gin-gonic/gin"
	"main/src/utils"
	"strconv"
)

func GetContent(c *gin.Context) {
	body := &GetContentDto{}

	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	users, err := body.Get(c)
	if err != nil {
		return
	}
	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		users,
	)
}

func CreateContent(c *gin.Context) {
	body := &CreateContentDto{}
	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	content, err := body.CreateContent(c)
	if err != nil {
		return
	}

	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		content,
	)
}

func DeleteContent(c *gin.Context) {
	body := &DeleteContentDto{}
	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	if err := body.DeleteContent(c); err != nil {
		return
	}

	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		nil,
	)
}

func UpdateContent(c *gin.Context) {
	body := &UpdateContentDto{}
	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	content, err := body.UpdateContent(c)
	if err != nil {
		return
	}
	res := &ContentInfoResponseDto{}
	res.format(*content)
	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		res,
	)
}

func GetImage(c *gin.Context) {
	body := &GetImageDto{}

	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	users, err := body.Get(c)
	if err != nil {
		return
	}
	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		users,
	)
}

func CreateImage(c *gin.Context) {
	body := &CreateImageDto{}
	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	content, err := body.Create(c)
	if err != nil {
		return
	}

	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		content,
	)
}

func UpdateImage(c *gin.Context) {
	body := &UpdateImageDto{}
	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	link, err := body.UpdateImage(c)
	if err != nil {
		return
	}
	res := &ImageInfoResponseDto{}
	res.format(*link)
	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		res,
	)
}

func DeleteImage(c *gin.Context) {
	body := &DeleteImageDto{}
	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	if err := body.DeleteImage(c); err != nil {
		return
	}

	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		nil,
	)
}

func GetKeyWord(c *gin.Context) {
	body := &GetKeyWordDto{}

	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	users, err := body.Get(c)
	if err != nil {
		return
	}
	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		users,
	)
}

func CreateKeyWord(c *gin.Context) {
	body := &CreateKeyWordDto{}
	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	content, err := body.Create(c)
	if err != nil {
		return
	}

	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		content,
	)
}

func UpdateKeyWord(c *gin.Context) {
	body := &UpdateKeyWordDto{}
	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	keyword, err := body.UpdateKeyword(c)
	if err != nil {
		return
	}
	res := &KeywordInfoResponseDto{}
	res.format(*keyword)
	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		res,
	)
}

func DeleteKeyWord(c *gin.Context) {
	body := &DeleteKeywordDto{}
	if err := utils.ShouldBind(c, &body); err != nil {
		return
	}
	if err := body.DeleteKeyword(c); err != nil {
		return
	}

	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		nil,
	)
}

func ExportFileByKeywordView(c *gin.Context) {
	body := &ExportFileByKeyword{}
	body.File, _ = c.FormFile("file")
	body.Cat, _ = strconv.Atoi(c.PostForm("cat"))
	ctn, err := body.Export(c)
	if err != nil {
		return
	}

	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		ctn,
	)
}

func ExportFileByImageView(c *gin.Context) {
	body := &ExportFileByImage{}
	body.File, _ = c.FormFile("file")
	body.Cat, _ = strconv.Atoi(c.PostForm("cat"))
	ctn, err := body.Export(c)
	if err != nil {
		return
	}

	utils.Response(
		c,
		"ok",
		utils.Status.Ok,
		ctn,
	)
}
